class Solution {
public:
    int lenLongestFibSubseq(vector<int>& arr) {
        int n = arr.size();
        unordered_map<int,int> hash;
        for(int i=0;i<n;i++)
        {
            hash[arr[i]] = i;//记录元素与下标的映射关系
        }
        int ret=0;
        vector<vector<int>> dp(n,vector<int>(n,2));
        for(int j=2;j<n;j++)
        {
            for(int i=1;i<j;i++)
            {
                int a = arr[j]-arr[i];
                if(a<arr[i] && hash.count(a))
                {
                    dp[i][j] = dp[hash[a]][i]+1;
                }
                ret = max(ret,dp[i][j]);
            }
        }
        return ret==2?0:ret;
    }
};